package com.obelisco.vista.seguridad;

import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;

import nextapp.echo2.app.Color;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.ResourceImageReference;
import echopointng.*;
import nextapp.echo2.app.*;
import nextapp.echo2.app.layout.GridLayoutData;
import nextapp.echo2.app.layout.SplitPaneLayoutData;
import nextapp.echo2.app.FillImage;

import com.obelisco.exception.ObeliscoException;
import com.obelisco.modelo.beans.OrientacionMenu;
import com.obelisco.modelo.beans.TipoMenu;
import com.obelisco.modelo.data.CarpetaTransaccion;
import com.obelisco.modelo.data.Transaccion;
import com.obelisco.modelo.data.Usuario;
import com.obelisco.modelo.servicios.seguridad.IServicioAdministrarBitacora;
import com.obelisco.vista.seguridad.BarraMenu;
import com.obelisco.vista.seguridad.BarraEjecucion;
import com.obelisco.vista.componentes.DialogoError;
import com.obelisco.vista.componentes.Ventana;

import nextapp.echo2.app.Row;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.Alignment;
import nextapp.echo2.app.Label;
import nextapp.echo2.app.layout.RowLayoutData;

public class PaneAmbienteUsuario extends Ventana implements IComponenteUsuario {

	private Usuario usuario;
	private SeguridadUI seguridadUI;	
	private ContenedorMenuUsuario menuUsuario;	
	private IServicioAdministrarBitacora servicioAdministrarBitacora;
	private BarraMenuUsuario barraMenu;
	private ContentPane paneContenido;
	private Label lblUsuario;

	private MenuBarSeguridad menuBarSeguridad;

	/**
	 * Creates a new <code>PanePrincipal</code>.
	 */
	public PaneAmbienteUsuario() {
		super("");
		// Add design-time configured components.
		initComponents();
		initMenuUsuario();
	}
	
	private void initMenuUsuario() {
		
		barraMenu.addBarraMenuListener(manejoEventoSalir);
		barraMenu.addBarraMenuUsuarioListener(manejoEventoEjecucion);
		menuBarSeguridad.addBarraMenuUsuarioListener(manejoEventoEjecucion);

	}
	
	

	private BarraMenuListener manejoEventoSalir = new BarraMenuListener() {

		public void onSalir() {
			servicioAdministrarBitacora.registrarSalida(usuario);
			salir();
		}


	};
	
	private EjecutarListener manejoEventoEjecucion = new EjecutarListener() {


		public void onClickCarpeta(CarpetaTransaccion carpeta) {
			// En este metodo no se hace nada
		}

		public void onClickTransaccion(Transaccion transaccion) {
			// Se procede a evecutar en el area de trabajo la transaccion
			// solicitada
			try {
				//seguridadUI.mostrarTransaccion(transaccion);
				seguridadUI.mostrarTransaccion(usuario,transaccion);
			} catch (ObeliscoException obex) {
				if (obex.getMessage() != null) {
					DialogoError.mostrar("Error",obex.getMessage());
				} else {
					DialogoError.mostrar("Error",obex.getNumError());
				}
			}
		}

	};

	public void setUsuario(Usuario usuario) {
		// TODO Auto-generated method stub
		this.usuario = usuario;
		servicioAdministrarBitacora.registrarEntrada(usuario);
		lblUsuario.setText(usuario.getLogin().toUpperCase());
		barraMenu.setUsuario(usuario);		
		
		menuBarSeguridad.setOrientacionHorizontal(usuario.getOrientacionMenu().equals(OrientacionMenu.HORIZONTAL));
		menuBarSeguridad.setUsuario(usuario);	
		menuBarSeguridad.setVisible(usuario.getTipoMenu().equals(TipoMenu.BARRA));
	}


	public SeguridadUI getSeguridadUI() {
		return seguridadUI;
	}

	public void setSeguridadUI(SeguridadUI seguridadUI) {
		this.seguridadUI = seguridadUI;
		this.seguridadUI.setContenedor(paneContenido);
	}


	public ContenedorMenuUsuario getMenuUsuario() {
		return menuUsuario;
	}


	public void setMenuUsuario(ContenedorMenuUsuario menuUsuario) {
		this.menuUsuario = menuUsuario;
		// Se le define la barra de menu
		Map<String, ContenedorEmergente> menus = new HashMap<String, ContenedorEmergente>();
		menus.put("Menu de Usuario",menuUsuario);
		barraMenu.setMenus(menus);
		menuUsuario.setHeight(new Extent(420, Extent.PX));
		menuUsuario.setWidth(new Extent (450, Extent.PX));

	}


	public IServicioAdministrarBitacora getServicioAdministrarBitacora() {
		return servicioAdministrarBitacora;
	}


	public void setServicioAdministrarBitacora(
			IServicioAdministrarBitacora servicioAdministrarBitacora) {
		this.servicioAdministrarBitacora = servicioAdministrarBitacora;
	}


	/**
	 * Configures initial state of component.
	 * WARNING: AUTO-GENERATED METHOD.
	 * Contents will be overwritten.
	 */
	private void initComponents() {		
	    // SplitPane que divide la barra superior y el area de trabajo
		SplitPane splitPanePrincipal = new SplitPane();
		splitPanePrincipal.setOrientation(SplitPane.ORIENTATION_VERTICAL_TOP_BOTTOM);
		splitPanePrincipal.setSeparatorPosition(new Extent(34, Extent.PX));
		splitPanePrincipal.setBackground(Color .WHITE);
		this.add(splitPanePrincipal);
		
		// ContentPane donde va la barra superior
		ContentPane paneSuperior = new ContentPane();		
		ResourceImageReference imageBarraSuperior = new ResourceImageReference("/com/obelisco/vista/resource/image/fill/ControlPaneFill.png");
		FillImage fillImageBarraSuperior = new FillImage(imageBarraSuperior, new Extent(50, Extent.PERCENT), new Extent(0, Extent.PERCENT), FillImage.REPEAT);
		paneSuperior.setBackgroundImage(fillImageBarraSuperior);		
		splitPanePrincipal.add(paneSuperior);
		
		// Grid que contiene el menu de usuario
		Grid menuGrid = new Grid();
		menuGrid.setSize(2);
		menuGrid.setColumnWidth(0, new Extent(100, Extent.PERCENT)); //PX denota pixeles
		GridLayoutData gridLayoutMenu = new  GridLayoutData();
		gridLayoutMenu.setAlignment( new Alignment(Alignment.RIGHT, Alignment.CENTER));
		paneSuperior.add(menuGrid);	
		
		// Menu de Usuario
		barraMenu = new BarraMenuUsuario();
		Row filaBarraMenu = new Row();
		filaBarraMenu.setInsets(new Insets(new Extent(6, Extent.PX)));
		filaBarraMenu.setAlignment(new Alignment(Alignment.LEFT, Alignment.BOTTOM));
		filaBarraMenu.add(barraMenu);
		menuGrid.add(filaBarraMenu);
		
		// Etiqueta con el nombre del usuario
		lblUsuario = new Label();
		ResourceImageReference imageReference2 = new ResourceImageReference("/com/obelisco/vista/resource/image/icon/general/Icon16IdCard.png");
		lblUsuario.setIcon(imageReference2);
		Row filaDatosUsuarioEmpresa = new Row();
		filaDatosUsuarioEmpresa.setLayoutData(gridLayoutMenu);
		lblUsuario.setText("Usuario");
		filaDatosUsuarioEmpresa.add(lblUsuario);
		
		// Etiqueta con la palabra Empresa
		Label lblEmpresa = new Label();
		lblEmpresa.setText("Empresa:");		
		RowLayoutData label2LayoutData = new RowLayoutData();
		label2LayoutData.setInsets(new Insets(new Extent(10, Extent.PX),new Extent(0, Extent.PX), new Extent(0, Extent.PX), new Extent(0, Extent.PX)));
		lblEmpresa.setLayoutData(label2LayoutData);		
		filaDatosUsuarioEmpresa.add(lblEmpresa);
		
		// Etiqueta con el nombre de la Empresa
		Label lblNombreEmpresa = new Label();
		lblNombreEmpresa.setText("CRV");
		filaDatosUsuarioEmpresa.add(lblNombreEmpresa);		
		menuGrid.add(filaDatosUsuarioEmpresa);
		
		// ContentPane donde va el area de trabajo
		paneContenido = new ContentPane();				
        ResourceImageReference imageFondo = new ResourceImageReference("/com/obelisco/vista/resource/image/fill/fondo2.png");
        FillImage fillImageFondo = new FillImage(imageFondo, new Extent(0, Extent.PERCENT), new Extent(0, Extent.PERCENT), FillImage.NO_REPEAT);
	    paneContenido.setBackgroundImage(fillImageFondo);	    
	    splitPanePrincipal.add(paneContenido);
	    menuBarSeguridad = new MenuBarSeguridad();
	    paneContenido.add(menuBarSeguridad);
	    
		
	    
		/*
	    paneContenido = new ContentPane();
		barraMenu = new BarraMenuUsuario();		
        ResourceImageReference imageFondo = new ResourceImageReference(
		"/com/obelisco/vista/resource/image/fill/fondo2.png");
        FillImage fillImageFondo = new FillImage(imageFondo, new Extent(0, Extent.PERCENT), new Extent(0, Extent.PERCENT), FillImage.NO_REPEAT);
	    paneContenido.setBackgroundImage(fillImageFondo);
		
	
		Grid menuGrid = new Grid();
		menuGrid.setColumnWidth(0, new Extent(100, Extent.PERCENT)); //PX denota pixeles
		GridLayoutData gridLayout1por1Menu= new  GridLayoutData();
		gridLayout1por1Menu.setAlignment( new Alignment(Alignment.RIGHT, Alignment.CENTER));
		
		SplitPane splitPane3 = new SplitPane();
		splitPane3.setOrientation(SplitPane.ORIENTATION_VERTICAL_TOP_BOTTOM);
		splitPane3.setSeparatorPosition(new Extent(34, Extent.PX));
		splitPane3.setBackground(Color .WHITE);
		add(splitPane3);
		
		
		
		paneInferior = new ContentPane();
		
		ResourceImageReference imageReference = new ResourceImageReference(
				"/com/obelisco/vista/resource/image/fill/ControlPaneFill.png");
		FillImage imagenBanPrincipal = new FillImage(imageReference, new Extent(50, Extent.PERCENT), new Extent(0, Extent.PERCENT), FillImage.REPEAT);
		paneInferior.setBackgroundImage(imagenBanPrincipal);
		paneInferior.add(menuGrid);
		
		splitPane3.add(paneInferior);
		Row row2 = new Row();
		Row row1 = new Row();
		//row1.setInsets(new Insets(new Extent(6, Extent.PX)));
		//row1.setAlignment(new Alignment(Alignment.RIGHT, Alignment.BOTTOM));
		row2.setInsets(new Insets(new Extent(6, Extent.PX)));
		row2.setAlignment(new Alignment(Alignment.LEFT, Alignment.BOTTOM));
		row2.add(barraMenu);
		
		menuGrid.setSize(2);
		
		menuGrid.add(row2);
		row1.setLayoutData(gridLayout1por1Menu);
		menuGrid.add(row1);
	//	paneInferior.add(row1);
		Label label1 = new Label();
		ResourceImageReference imageReference2 = new ResourceImageReference(
				"/com/obelisco/vista/resource/image/icon/general/Icon16IdCard.png");
		label1.setIcon(imageReference2);
		row1.add(label1);
		lblUsuario = new Label();
		lblUsuario.setText("USUARIO");
		row1.add(lblUsuario);
		Label label2 = new Label();
		label2.setText("Empresa:");
		RowLayoutData label2LayoutData = new RowLayoutData();
		label2LayoutData.setInsets(new Insets(new Extent(10, Extent.PX),
				new Extent(0, Extent.PX), new Extent(0, Extent.PX), new Extent(
						0, Extent.PX)));
		label2.setLayoutData(label2LayoutData);
		row1.add(label2);
		lblEmpresa = new Label();
		lblEmpresa.setText("CRV");
		row1.add(lblEmpresa);
		
		ContentPane contentPane3 = new ContentPane();
		splitPane3.add(contentPane3);
		SplitPane splitPane2 = new SplitPane();
		splitPane2.setOrientation(SplitPane.ORIENTATION_VERTICAL_TOP_BOTTOM);
		splitPane2.setSeparatorPosition(new Extent(0, Extent.PX));
		contentPane3.add(splitPane2);
		paneIzquierdo = new ContentPane();
		splitPane2.add(paneIzquierdo);
		
		//Aqui se agrego el menu al fondo

		//paneContenido.add(barraMenu);
		//paneIzquierdo.add(barraMenu);//Se quito el menu de arriba
	    //paneContenido = new ContentPane();
		splitPane2.add(paneContenido);
		*/
	}

}
